# 迭代哈希（PBKDF2密码派生）

import hashlib
import binascii
import os

def pbkdf2_hash(password, salt=None, iterations=100000):
    """
    使用 PBKDF2-HMAC-SHA256 增强密码安全性
    :param password: 明文密码
    :param salt: 盐值（默认随机生成）
    :param iterations: 迭代次数（增加计算成本）
    :return: (盐, 派生密钥)
    """
    if salt is None:
        salt = os.urandom(16)  # 推荐 16 字节盐
    
    # 生成密钥（推荐至少 100,000 次迭代）
    dk = hashlib.pbkdf2_hmac(
        'sha256',
        password.encode('utf-8'),
        salt,
        iterations
    )
    # binascii.hexlify()将字节对象转换为16进制字节对象，
    # decode将其解码为字符串
    return salt.hex(), binascii.hexlify(dk).decode()

# 测试 PBKDF2
salt, derived_key = pbkdf2_hash("weak_password", iterations=150000)
print(f"PBKDF2 结果:\n盐: {salt}\n密钥: {derived_key}")
